
21.09.2010, 14:50
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
сделать более универсальным ajax-вывод
Здравствуйте. Есть JS скрипт:
<script type="text/javascript">
// Функция, осуществляющая AJAX запрос
function loadXMLDoc(method, url) {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send();
}
}
// Функция, выполняемая при изменении статуса
// запроса, если статус равен 200, данные получены
function processReqChange() {
if(req.readyState == 4) {
if(req.status == 200) {
getNumber(req.responseText);
} else {
alert("There was a problem retrieving the XML data:\n" + req.statusText);
}
}
}
// Функция выполняется при щелчке на "ссылке"
function onClick(prurl) {
var url = prurl;
loadXMLDoc( "get", url );
}
// Функция записывает в элемент content значение, полученное от сервера
function getNumber( number ) {
var content = document.getElementById( "content" );
content.innerHTML = number;
}
</script>
Работает например так:
<a href="#" onClick="onClick('ajax.php?num=1')">ссылка1</a><br>
<div id="content"></div>
Как сделать вывод более универсальным, т.е. чтоб в ссылке можно было указать id элемента в который выводить полученые данные, т.е. можно было использовать выбвод в неограниченое число разных блоков соответствующими ссылками?
|
|

21.09.2010, 21:17
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
Ну то есть надо чтобы можно было задавать в onClick дополнительный параметр - id элемента вывода, что позволило бы многократно использовать вывод в разные блоки на одной странице.
Типо такого:
<a href="#" onClick="onClick('ajax.php?num=3', 'content')>ссылка1</a>
Только как протащить дополнительный параметр функции onClick через весь скрипт?
|
|

22.09.2010, 04:33
|
Профессор
|
|
Регистрация: 21.01.2010
Сообщений: 1,022
|
|
<script type="text/javascript">
// Функция, осуществляющая AJAX запрос
function loadXMLDoc(method, url, target) {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send();
}
}
// Функция, выполняемая при изменении статуса
// запроса, если статус равен 200, данные получены
function processReqChange() {
if(req.readyState == 4) {
if(req.status == 200) {
getNumber(req.responseText, target);
} else {
alert("There was a problem retrieving the XML data:\n" + req.statusText);
}
}
}
// Функция выполняется при щелчке на "ссылке"
function onClick(prurl, target) {
var url = prurl;
loadXMLDoc( "get", url, target );
}
// Функция записывает в элемент content значение, полученное от сервера
function getNumber( number, target ) {
var content = document.getElementById( target || "content" );
content.innerHTML = number;
}
</script>
|
|

22.09.2010, 06:50
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
Я пробовал так делать - не получилось. И ваш вариант тоже не работает - ничего не происходит.
Вызываю так:
<a href='#' onClick="onClick('ajax.php?num=3', 'content')">ссылка</a><br>
<div id="content"></div>
Что не так?
Может дело в этой строке(повторяется дважды):
req.onreadystatechange = processReqChange;
так понимаю тут переменной присваивается результат выполнения функции, а параметр не передается?
Последний раз редактировалось LRCenter, 22.09.2010 в 06:54.
|
|

22.09.2010, 17:03
|
Новичок на форуме
|
|
Регистрация: 12.07.2010
Сообщений: 9
|
|
через глобальную переменную
|
|

22.09.2010, 18:47
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
Сообщение от aH6y
|
через глобальную переменную
|
А как в JS задать голбальную?
global var - я так понимаю не работает - этож не php.
А если просто задать вне функции, то не сработает, потому что обработка идет через функции, а они в коде страницы заданы раньше чем обращение к ним.
Как быть то?
Последний раз редактировалось LRCenter, 22.09.2010 в 19:06.
|
|

22.09.2010, 21:39
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
Разобрался с глобальныим переменными. Ввел функцию объявляющую глобальную переменную имени блока.
Рабочий пример, если кому надо. Кстати на этом можно по сути покрыть 90% всех потребностей в ajaxe, или я не прав?
<script type="text/javascript">
function vargo(blid) {blidf = blid;}
// Функция, осуществляющая AJAX запрос
function loadXMLDoc(method, url) {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send();
}
}
// Функция, выполняемая при изменении статуса
// запроса, если статус равен 200, данные получены
function processReqChange() {
if(req.readyState == 4) {
if(req.status == 200) {
getNumber(req.responseText);
} else {
alert("There was a problem retrieving the XML data:\n" + req.statusText);
}
}
}
// Функция выполняется при щелчке на "ссылке"
function urlbgo(prurl) {
var url = prurl;
loadXMLDoc( "get", url );
}
// Функция записывает в элемент content значение, полученное от сервера
function getNumber( number ) {
var content = document.getElementById(blidf);
content.innerHTML = number;
}
</script>
<span style="color:blue; text-decoration:underline; cursor:pointer" onClick="urlbgo('ajax.php?num=3'); vargo('asd');">ссылка 1</span><br>
<span style="color:blue; text-decoration:underline; cursor:pointer" onClick="urlbgo('ajax.php?num=2'); vargo('asd2');">ссылка 2</span><br>
<span style="color:blue; text-decoration:underline; cursor:pointer" onClick="urlbgo('ajax.php?num=1'); vargo('asd3');">ссылка 3</span><br>
<span id="asd">.</span> | <span id="asd2">.</span> | <span id="asd3">.</span>
exec, aH6y, спасибо за помощь и советы.
|
|

04.11.2010, 08:49
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
Все супер, только вот как бы так сделать что-бы в процессе загрузки\перезагрузки блока в него выводился индикатор ожидания, например просто текст "Ждите..."?
|
|

04.11.2010, 13:12
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
Разобрался. Вставил
var content = document.getElementById(blidf);
content.innerHTML = "Ждите...";
После
if(window.XMLHttpRequest){
|
|

04.11.2010, 22:30
|
Кандидат Javascript-наук
|
|
Регистрация: 22.06.2009
Сообщений: 117
|
|
Подскажите что изменить в скрипте чтобы можно было отправлять данные форм. Понятно что "get" на "post" поменять, а в какую переменную сами данные формы пристроить? Непонятно.. объясните.
|
|
|
|